package seniorFunction

object HigherOrderFunction extends App {
  val l = List(1,2,3,4,5)

  // map 逐个操作集合中的每个元素
  val l1 = l.map((x:Int) => x + 1)    // x 入参, 只有一个元素可以省略括号
  println(l1)

  val l2 = l.map(x => x * 2)
  println(l2)

  l.map(_ * 3).foreach(print)     // l 中每个元素乘以3   3 6 9 12 15
  println()

  // filter
  l.map(_ * 3).filter( _ > 8).foreach(print)            // 9 12 15
  println()

  // take 取前几个元素
  l.take(3).foreach(print)
  println()

  // reduce
  println(l.reduce(_ + _))         // 两两相加 15
  println(l.reduce(_ - _))        // -13
  println(l.reduceRight(_ - _))  // 3

  // fold
  println(l.fold(0)(_ - _))   // 两两相减 -15

  l.max

  val f = List(List(1,2), List(3,4))
  println(f.flatten)      // 将多个list变一个

  // 将每个list乘2
  println(f.map(_.map(_*2)))    // List(List(2, 4), List(6, 8))

  // 合并成一个list并乘2
  println(f.flatMap(_.map(_*2)))  // List(2, 4, 6, 8)


  // 读取文件
  var txt = scala.io.Source.fromFile("D:\\gitee\\scala\\src\\main\\scala\\com\\aqie\\seniorFunction\\txt.txt").mkString

  println(txt)
  // todo 实现词频统计
  var lt = List(txt)
  lt.flatMap(_.split(" ")).map(x => (x, 1)).foreach(println)
}
